package com.yckj.ytracker.api.trace;


import com.yckj.ytracker.api.model.Span;
import com.yckj.ytracker.api.model.TrackerData;

/**
 * 调用链接口
 */
public interface ITracerServer {

    /**
     * 开启一个新的调用链节点
     *
     * @param name     集群名
     * @param type     类型
     * @param funcName 方法名
     * @param param    方法参数
     * @return 生成的新节点
     */
    Span startNewSpan(String name, String type, String funcName, String param);

    /**
     * 开启新子节点
     *
     * @param name        集群名
     * @param type        类型
     * @param func        方法名
     * @param param       方法参数
     * @param trackerData 调用链数据
     */
    void startNewSpan(String name, String type, String func, String param, TrackerData trackerData);

    /**
     * 开启一个新的子调用节点
     *
     * @param type  类型
     * @param func  方法
     * @param param 方法参数
     * @return 生成的新节点
     */
    Span startChildSpan(String type, String func, String param);

    /**
     * 开始统计当前节点数据
     */
    void setSpanSent();

    /**
     * 结束统计当前节点数据,并发送数据
     */
    void setSpanReceived();

    /**
     * 获得当前节点
     *
     * @return 当前节点
     */
    Span getSpan();

    /**
     * 清除当前节点,不收集数据
     */
    void clearCurrentSpan();

    /**
     * 清除所有节点,并收集数据
     */
    void collectAllSpan();
}
